

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СоответствиеИсточник = Новый Соответствие;
	Если Параметры.Свойство("ХранилищеКонтейнераЗначения") Тогда
		//@skip-check unknown-form-parameter-access
		ХранилищеКонтейнтейнера = Параметры.ХранилищеКонтейнераЗначения;//см. УИ_ОбщегоНазначенияКлиентСервер.НовыйХранилищеЗначенияТипаСоответствие
		
		Если ХранилищеКонтейнтейнера <> Неопределено Тогда
			СоответствиеИсточник = УИ_ОбщегоНазначения.ЗначениеИзХранилищаКонтейнераСоответствия(ХранилищеКонтейнтейнера);
		КонецЕсли;
	ИначеЕсли Параметры.Свойство("СтруктураДляИзменения") Тогда 
		//@skip-check unknown-form-parameter-access
		СоответствиеИсточник = Параметры.СтруктураДляИзменения;
	КонецЕсли;
	
	ПрочитатьСоответствиеВТаблицу(СоответствиеИсточник);
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаСоответствия

&НаКлиенте
Процедура ТаблицаСтрукутурыЗначениеПриИзменении(Элемент)
	ТекДанные = Элементы.ТаблицаСоответствия.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияПриИзменении(ЭтотОбъект,
																								  Элемент,
																								  "Значение");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикПриИзменении(ПараметрыОбработчика);
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаСтрукутурыЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ТекДанные = Элементы.ТаблицаСоответствия.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		ВозвраТ;
	КонецЕсли;
	
	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияНачалоВыбораЗначения(ЭтотОбъект,
																										  Элемент,
																										  "Значение");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.Значение = ТекДанные.Значение;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;
	ПараметрыОбработчика.НаборТипов = УИ_ОбщегоНазначенияКлиентСервер.ВсеНаборыТиповДляРедактирования();

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикНачалоВыбораЗначения(ПараметрыОбработчика, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаСтрукутурыЗначениеОчистка(Элемент, СтандартнаяОбработка)
	ТекДанные = Элементы.ТаблицаСоответствия.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияОчистка(ЭтотОбъект,
																							 Элемент,
																							 "Значение");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикОчистка(ПараметрыОбработчика, СтандартнаяОбработка);
КонецПроцедуры


&НаКлиенте
Процедура ТаблицаСтрукутурыКлючНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ТекДанные = Элементы.ТаблицаСоответствия.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		ВозвраТ;
	КонецЕсли;
	
	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияНачалоВыбораЗначения(ЭтотОбъект,
																										  Элемент,
																										  "Ключ");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.Значение = ТекДанные.Ключ;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;
	ПараметрыОбработчика.НаборТипов = УИ_ОбщегоНазначенияКлиентСервер.ВсеНаборыТиповДляРедактирования();

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикНачалоВыбораЗначения(ПараметрыОбработчика, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаСтрукутурыКлючОчистка(Элемент, СтандартнаяОбработка)
	ТекДанные = Элементы.ТаблицаСоответствия.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияОчистка(ЭтотОбъект,
																							 Элемент,
																							 "Ключ");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикОчистка(ПараметрыОбработчика, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаСтрукутурыКлючПриИзменении(Элемент)
	ТекДанные = Элементы.ТаблицаСоответствия.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияПриИзменении(ЭтотОбъект,
																								  Элемент,
																								  "Ключ");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикПриИзменении(ПараметрыОбработчика);
КонецПроцедуры



#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Применить(Команда)
	Закрыть(ХранилищеОтредактированногоСоответствия());
КонецПроцедуры


#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ХранилищеОтредактированногоСоответствия()
	СтруктураХраненияЗначения = УИ_ОбщегоНазначенияКлиентСервер.НовыйСтруктураХраненияРеквизитаНаФормеСКонейнером("Значение");
	СтруктураХраненияКлюча = УИ_ОбщегоНазначенияКлиентСервер.НовыйСтруктураХраненияРеквизитаНаФормеСКонейнером("Ключ");

	СоответствиеВозврата = Новый Соответствие;

	Для Каждого СтрокаТаблицы Из ТаблицаСоответствия Цикл
		СоответствиеВозврата.Вставить(УИ_ОбщегоНазначенияКлиентСервер.ЗначениеПоляСКонтейнеромЗначения(СтрокаТаблицы,
																									   СтруктураХраненияКлюча),
									  УИ_ОбщегоНазначенияКлиентСервер.ЗначениеПоляСКонтейнеромЗначения(СтрокаТаблицы,
																									   СтруктураХраненияЗначения));
	КонецЦикла;

	Возврат УИ_ОбщегоНазначения.ЗначениеХранилищеКонтейнераСоответствия(СоответствиеВозврата);
КонецФункции

&НаСервере
Процедура ПрочитатьСоответствиеВТаблицу(СоответствиеИсточник)
	СтруктураХраненияЗначения = УИ_ОбщегоНазначенияКлиентСервер.НовыйСтруктураХраненияРеквизитаНаФормеСКонейнером("Значение");
	СтруктураХраненияКлюча = УИ_ОбщегоНазначенияКлиентСервер.НовыйСтруктураХраненияРеквизитаНаФормеСКонейнером("Ключ");
	
	ТаблицаСоответствия.Очистить();
	Для Каждого КлючЗначение Из СоответствиеИсточник Цикл
		НоваяСтрока = ТаблицаСоответствия.Добавить();
		УИ_ОбщегоНазначенияКлиентСервер.УстановитьЗначениеПоляСКонтейнером(НоваяСтрока,
																		   СтруктураХраненияКлюча,
																		   КлючЗначение.Ключ);
		УИ_ОбщегоНазначенияКлиентСервер.УстановитьЗначениеПоляСКонтейнером(НоваяСтрока,
																		   СтруктураХраненияЗначения,
																		   КлючЗначение.Значение);
	КонецЦикла;
КонецПроцедуры

#КонецОбласти
